// Copyright 2009 the Sputnik authors.  All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
info: The Boolean type have two values, called true and false
es5id: 8.3_A1_T2
description: Check type of true/false and its equality
---*/

//////////////////////////////////////////////////////////////////////
// CHECK#1
function Test() {
    if (typeof(true) !== "boolean") {
      throw new Test262Error('#1: typeof(true) === "boolean"');
    }
//
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// CHECK#2
    if (typeof(true) != "boolean") {
      throw new Test262Error('#2: typeof(true) == "boolean"');
    }
//
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// CHECK#3
    if (typeof(false) !== "boolean") {
      throw new Test262Error('#3: typeof(false) === "boolean"');
    }
//
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// CHECK#4
    if (typeof(false) != "boolean") {
      throw new Test262Error('#4: typeof(false) == "boolean"');
    }
//
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// CHECK#5
    if (true === false) {
      throw new Test262Error('#5: true !== false');
    }
//
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// CHECK#6
    if (true == false) {
      throw new Test262Error('#6: true != false');
    }
//
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// CHECK#7
    if (false === true) {
      throw new Test262Error('#7: false !== true');
    }
//
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// CHECK#8
    if (false == true) {
      throw new Test262Error('#8: false != true');
    }
//
//////////////////////////////////////////////////////////////////////
}

// preheat
const NUMBER_OF_PREHEAT = 1;
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}

ArkTools.jitCompileAsync(Test);
assert.sameValue(ArkTools.waitJitCompileFinish(Test), true, '[JIT] JIT disabled.');

// test
const NUMBER_OF_TEST = 1; // or 2
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}
